home *** CD-ROM | disk | FTP | other *** search
/ Cream of the Crop 1 / Cream of the Crop 1.iso / PROGRAM / TAN_SND.ARJ / DRUMS.PAS < prev    next >
Pascal/Delphi Source File  |  1991-07-28  |  6KB  |  306 lines

  1. unit drums;   { DRUMS.PAS  Copyright (c) 1990 DSoft Specialties }
  2. interfac      { Drum routines for the Tandy 1000 and/or PCJr. See DRUMS.SIM }
  3. uses dos,noiz;
  4.  
  5. { All I ask is if you use any of these routines in your program
  6.   please mention DSoft in the docs or in a copyright message }
  7.  
  8. type
  9.   echo_style = (short,long);
  10.  
  11. const
  12.   drumpitch: word = 0;
  13.   inturbo: boolean = true;
  14.  
  15. procedure wait(dt: longint);
  16. procedure delay(dt: longint);
  17. procedure drum_pitch(i: word);
  18. procedure down(snd,step: byte;pitch: word);
  19. procedure up(snd,step: byte;pitch: word);
  20. procedure noise(ch: char;sr,amp,duration: word);
  21. procedure dwn(reps,tone,dur: integer);
  22. procedure snare(reps,dur: byte);
  23. procedure tom(reps,dur: byte);
  24. procedure lowtom(reps,dur: byte);
  25. procedure bass(reps,dur: byte);
  26. procedure bass2(reps,dur: byte);
  27. procedure roto1(reps,dur: byte);
  28. procedure roto2(reps,dur: byte);
  29. procedure roto5(reps,tone,dur: integer);
  30. procedure sims(reps,dur: byte);
  31. procedure sims1(reps,dur: byte);
  32. procedure sims2(reps,dur: byte);
  33. procedure sims3(reps,dur: byte);
  34. procedure crash(reps,dur: integer);
  35. procedure roll(reps,dur,crashdur: integer);
  36. procedure lick(reps: byte);
  37. procedure echo(del: word;es: echo_style);
  38. procedure quiet;
  39. function fkey: char;
  40. function keyhit: boolean;
  41.  
  42. implementation
  43.  
  44. procedure wait(dt: longint);
  45. const
  46.   inturb = 30;
  47.   indos = 42;
  48. var tt,ir,tr: longint;
  49. begin
  50.   if inturbo then
  51.     tt:=inturb
  52.   else
  53.     tt:=indos;
  54.   for ir:=1 to dt do
  55.     for tr:=1 to tt do
  56. end;
  57.  
  58. procedure delay(dt: longint);
  59. begin
  60.   wait(dt);
  61. end;
  62.  
  63. procedure drum_pitch(i: word);
  64. var j: integer;
  65. begin
  66.   for j:=0 to 3 do sound_pitch(j,i);
  67. end;
  68.  
  69. procedure down(snd,step: byte;pitch: word);
  70. var i: byte;
  71. begin
  72.   port[$C0]:=$E0+1*4+snd;
  73.   for i:=0 to 15 do
  74.   begin
  75.     port[$C0]:=$F0+i;
  76.     wait(step);
  77.   end;
  78.   drum_pitch(pitch);
  79. end;
  80.  
  81. procedure up(snd,step: byte;pitch: word);
  82. var i: byte;
  83. begin
  84.   port[$C0]:=$E0+1*4+snd;
  85.   for i:=15 downto 0 do
  86.   begin
  87.     port[$C0]:=$F0+i;
  88.     wait(step);
  89.   end;
  90.   port[$C0]:=$FF;
  91.   drum_pitch(pitch);
  92. end;
  93.  
  94. procedure noise(ch: char;sr,amp,duration: word);
  95. var portpass1: integer;
  96. begin
  97.   portpass1:=224;
  98.   if (ch in ['W','w']) then portpass1:=portpass1 + 4;
  99.   case sr of
  100.     10: portpass1:=portpass1 + 1;
  101.     20: portpass1:=portpass1 + 2;
  102.   end;
  103.   port[$C0]:=240+amp;
  104.   port[$C0]:=portpass1;
  105.   wait(duration);
  106. end;
  107.  
  108. procedure dwn(reps,tone,dur: integer);
  109. var i,j,k: integer;
  110. begin
  111.   for i:=1 to reps do
  112.   begin
  113.     for j:=0 to 15 do
  114.     begin
  115.       noise('w',tone,j,dur); noise(' ',0,15,1);
  116.     end;
  117.   end;
  118. end;
  119.  
  120. procedure snare(reps,dur: byte);
  121. var i: byte;
  122. begin
  123.   for i:=1 to reps do down(0,dur,drumpitch);
  124. end;
  125.  
  126. procedure tom(reps,dur: byte);
  127. var i: byte;
  128. begin
  129.   drumpitch:=0;
  130.   for i:=1 to reps do down(1,dur,drumpitch);
  131. end;
  132.  
  133. procedure lowtom(reps,dur: byte);
  134. var i: byte;
  135. begin
  136.   for i:=1 to reps do down(2,dur,drumpitch);
  137. end;
  138.  
  139. procedure bass(reps,dur: byte);
  140. var i: byte;
  141. begin
  142.   for i:=1 to reps do down(3,dur,0);
  143. end;
  144.  
  145. procedure bass2(reps,dur: byte);
  146. var i: byte;
  147. begin
  148.   for i:=1 to reps do
  149.   begin
  150.     down(3,dur div 2,drumpitch);
  151.     down(2,dur div 2,drumpitch);
  152.   end;
  153. end;
  154.  
  155. procedure roto1(reps,dur: byte);
  156. var i,j: integer;
  157. begin
  158.   for i:=1 to reps do
  159.   begin
  160.     up(1,dur,20); down(2,dur,0);
  161.   end;
  162. end;
  163.  
  164. procedure roto2(reps,dur: byte);
  165. var i,j: integer;
  166. begin
  167.   for i:=1 to reps do
  168.   begin
  169.     up(2,1,0);
  170.     for j:=140 to 340 do sound(j);
  171.     wait(dur); nosound;
  172.   end;
  173.   drumpitch:=0;
  174. end;
  175.  
  176. procedure roto5(reps,tone,dur: integer);
  177. var i,j: integer;
  178. begin
  179.   for i:=1 to reps do
  180.   begin
  181.     dwn(1,tone,dur);
  182.   end;
  183. end;
  184.  
  185. procedure sims(reps,dur: byte);
  186. var i,j: byte;
  187. begin
  188.   for i:=1 to reps do
  189.   begin
  190.     up(1,1,0);
  191.     for j:=220 downto 23 do sound(j);
  192.     nosound;
  193.     wait(dur);
  194.   end;
  195. end;
  196.  
  197. procedure sims1(reps,dur: byte);
  198. var i,j: integer;
  199. begin
  200.   for i:=1 to reps do
  201.   begin
  202.     up(1,1,0);
  203.     for j:=440 downto 230 do sound(j);
  204.     nosound;
  205.     wait(dur);
  206.   end;
  207. end;
  208.  
  209. procedure sims2(reps,dur: byte);
  210. var i,j: integer;
  211. begin
  212.   for i:=1 to reps do
  213.   begin
  214.     up(1,1,0);
  215.     for j:=880 downto 660 do sound(j);
  216.     nosound;
  217.     wait(dur);
  218.   end;
  219. end;
  220.  
  221. procedure sims3(reps,dur: byte);
  222. var i,j: integer;
  223. begin
  224.   for i:=1 to reps do
  225.   begin
  226.     up(1,1,0);
  227.     for j:=1020 downto 880 do sound(j);
  228.     nosound;
  229.     wait(dur);
  230.   end;
  231. end;
  232.  
  233. procedure crash(reps,dur: integer);
  234. var i: byte;
  235. begin
  236.   for i:=1 to reps do
  237.   begin
  238.     up(0,4,0);
  239.     down(0,dur,0);
  240.   end;
  241. end;
  242.  
  243. procedure roll(reps,dur,crashdur: integer);
  244. var i,j: integer;
  245. begin
  246.   for j:=1 to reps do
  247.   begin
  248.     snare(4,dur);
  249.     tom(4,dur);
  250.     lowtom(4,dur);
  251.     bass(4,dur);
  252.   end;
  253.   if (crashdur > 0) then
  254.   begin
  255.     up(0,1,0); down(0,crashdur,0);
  256.   end;
  257. end;
  258.  
  259. procedure lick(reps: byte);
  260. begin
  261.   up(1,3,drumpitch); up(0,3,drumpitch); up(2,3,drumpitch);
  262.   lowtom(4,2); tom(4,2);
  263.   sims(4,15); up(2,3,drumpitch);
  264.   roll(reps,2,22);
  265. end;
  266.  
  267. procedure quiet;
  268. begin
  269.   noiz.quiet;
  270. end;
  271.  
  272. procedure echo(del: word;es: echo_style);
  273. var i: integer;
  274. begin
  275.   for i:=0 to 15 do
  276.   begin
  277.     noiz.noise('w',20,i,del); noiz.noise('w',10,i,2);
  278.     noiz.noise('w',0,i,2);
  279.     case es of
  280.       short: noiz.noise(' ',5,15,0);
  281.        long: noiz.noise(' ',5,15,del);
  282.     end;
  283.   end;
  284. end;
  285.  
  286. function fkey: char;
  287. var regs: registers;
  288. begin
  289.   regs.AH:=0;
  290.   intr($16,regs);
  291.   if regs.AL=0 then
  292.     fkey:=chr(regs.AH+128)
  293.   else
  294.     fkey:=chr(regs.AL)
  295. end;
  296.  
  297. function keyhit: boolean;
  298. var regs: registers;
  299. begin
  300.   regs.AH:=1;
  301.   intr($16,regs);
  302.   keyhit:=(regs.flags and 64)=0;
  303. end;
  304.  
  305. end.
  306.